package cc.rengu.igas.share.facade.bean.cups;

import cc.rengu.oltp.service.common.enums.OltpRpcdEnum;
import cc.rengu.oltp.service.model.BizException;

import java.util.Arrays;

/**
 * F25 服务点条件码
 *
 * @author fangminwei
 * @date 2021/4/17
 */
@SuppressWarnings("AlibabaEnumConstantsMustHaveComment")
public enum F25_ServiceConditionEnum {
    _00("00", "正常提交"),
    _01("01", "客户不提交"),
    _02("02", "自助终端"),
    _03("03", "可疑商户"),
    _05("05", "客户提交但卡不提交"),
    _06("06", "预授权请求"),
    _07("07", "保留使用（已使用）"),
    _08("08", "授权、消费（专用于 MOTO 业务）"),
    _09("09", "保留使用（已使用）"),
    _10("10", "确认的客户标识"),
    _11("11", "作弊嫌疑"),
    _12("12", "安全原因"),
    _13("13", "再请款"),
    _14("14", "保留使用（已使用）参见《对公预授权技术实施指南》"),
    _17("17", "退单"),
    _18("18", "MOTO 预授权类"),
    _20("20", "保留使用参见《单位标记支付技术实施指南》"),
    _28("28", "代收类"),
    _41("41", "二次退单"),
    _42("42", "电子商务交易的正常提交"),
    _43("43", "电子商务交易的预授权请求"),
    _44("44", "电子商务交易的再请款"),
    _45("45", "电子商务交易的退单"),
    _60("60", "保留使用"),
    _64("64", "采取分期付款方式完成支付"),
    _65("65", "采取积分兑换方式完成支付"),
    _66("66", "转入方付费的转账"),
    _67("67", "Ⅱ、 Ⅲ类账户相关交易"),
    _68("68", "贷记类"),
    _69("69", "IC 卡电子现金脱机退货"),
    _82("82", "差错例外"),
    _83("83", "转入方提出的贷记调整、发卡方提出的存款的贷记调整"),
    _91("91", "基于 UICS 的 IC 卡电子现金应用的圈存类交易"),
    ;

    private String code;
    private String desc;

    F25_ServiceConditionEnum(String code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    public String getCode() {
        return code;
    }

    public String getDesc() {
        return desc;
    }

    @Override
    public String toString() {
        return code + "-" + desc;
    }

    public static F25_ServiceConditionEnum find(String code) {
        F25_ServiceConditionEnum result = Arrays.stream(F25_ServiceConditionEnum.values())
                .filter(e -> e.getCode().equals(code)).findFirst().orElse(null);

        if (result == null) {
            throw new BizException(OltpRpcdEnum.PARAM_IS_EMPTY_OR_NULL.getRespCode(), "找不到对应的枚举信息" + code);
        }
        return result;
    }
}
